/tests/Zend/Db/Table/Select/StaticTest.php

https://github.com/devilsansclue/ZendFramework · PHP · 700 lines · 370 code · 115 blank · 215 comment · 0 complexity · da7b2d752d4fafd7cbd340b51ebfaed8 MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Db
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. /**
  23. * @see Zend_Db_Table_Select_TestCommon
  24. */
  25. require_once 'Zend/Db/Select/TestCommon.php';
  26. /**
  27. * @category Zend
  28. * @package Zend_Db
  29. * @subpackage UnitTests
  30. * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
  31. * @license http://framework.zend.com/license/new-bsd New BSD License
  32. * @group Zend_Db
  33. * @group Zend_Db_Table
  34. * @group Zend_Db_Table_Select
  35. */
  36. class Zend_Db_Table_Select_StaticTest extends Zend_Db_Select_TestCommon
  37. {
  38. /**
  39. * Test basic use of the Zend_Db_Select class.
  40. *
  41. * @return void
  42. */
  43. public function testSelect()
  44. {
  45. $select = $this->_select();
  46. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  47. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts"', $sql);
  48. }
  49. /**
  50. * Test basic use of the Zend_Db_Select class.
  51. *
  52. * @return void
  53. */
  54. public function testSelectQuery()
  55. {
  56. $select = $this->_select();
  57. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  58. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts"', $sql);
  59. $stmt = $select->query();
  60. Zend_Loader::loadClass('Zend_Db_Statement_Static');
  61. $this->assertType('Zend_Db_Statement_Static', $stmt);
  62. }
  63. /**
  64. * ZF-2017: Test bind use of the Zend_Db_Select class.
  65. */
  66. public function testSelectQueryWithBinds()
  67. {
  68. $select = $this->_select()->where('product_id = :product_id')
  69. ->bind(array(':product_id' => 1));
  70. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  71. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE (product_id = :product_id)', $sql);
  72. $stmt = $select->query();
  73. Zend_Loader::loadClass('Zend_Db_Statement_Static');
  74. $this->assertType('Zend_Db_Statement_Static', $stmt);
  75. }
  76. /**
  77. * Test Zend_Db_Select specifying columns
  78. *
  79. * @return void
  80. */
  81. public function testSelectColumnsScalar()
  82. {
  83. $select = $this->_selectColumnsScalar();
  84. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  85. $this->assertEquals('SELECT "zfproducts"."product_name" FROM "zfproducts"', $sql);
  86. }
  87. /**
  88. * Test Zend_Db_Select specifying columns
  89. *
  90. * @return void
  91. */
  92. public function testSelectColumnsArray()
  93. {
  94. $select = $this->_selectColumnsArray();
  95. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  96. $this->assertEquals('SELECT "zfproducts"."product_id", "zfproducts"."product_name" FROM "zfproducts"', $sql);
  97. }
  98. /**
  99. * Test support for column aliases.
  100. * e.g. from('table', array('alias' => 'col1')).
  101. *
  102. * @return void
  103. */
  104. public function testSelectColumnsAliases()
  105. {
  106. $select = $this->_selectColumnsAliases();
  107. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  108. $this->assertEquals('SELECT "zfproducts"."product_name" AS "alias" FROM "zfproducts"', $sql);
  109. }
  110. /**
  111. * Test syntax to support qualified column names,
  112. * e.g. from('table', array('table.col1', 'table.col2')).
  113. *
  114. * @return void
  115. */
  116. public function testSelectColumnsQualified()
  117. {
  118. $select = $this->_selectColumnsQualified();
  119. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  120. $this->assertEquals('SELECT "zfproducts"."product_name" FROM "zfproducts"', $sql);
  121. }
  122. /**
  123. * Test support for columns defined by Zend_Db_Expr.
  124. *
  125. * @return void
  126. */
  127. public function testSelectColumnsExpr()
  128. {
  129. $select = $this->_selectColumnsExpr();
  130. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  131. $this->assertEquals('SELECT "zfproducts"."product_name" FROM "zfproducts"', $sql);
  132. }
  133. /**
  134. * Test support for automatic conversion of SQL functions to
  135. * Zend_Db_Expr, e.g. from('table', array('COUNT(*)'))
  136. * should generate the same result as
  137. * from('table', array(new Zend_Db_Expr('COUNT(*)')))
  138. */
  139. public function testSelectColumnsAutoExpr()
  140. {
  141. $select = $this->_selectColumnsAutoExpr();
  142. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  143. $this->assertEquals('SELECT COUNT(*) AS "count" FROM "zfproducts"', $sql);
  144. }
  145. /**
  146. * Test adding the DISTINCT query modifier to a Zend_Db_Select object.
  147. */
  148. public function testSelectDistinctModifier()
  149. {
  150. $select = $this->_selectDistinctModifier();
  151. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  152. $this->assertEquals('SELECT DISTINCT 327 FROM "zfproducts"', $sql);
  153. }
  154. /**
  155. * Test adding the FOR UPDATE query modifier to a Zend_Db_Select object.
  156. *
  157. public function testSelectForUpdateModifier()
  158. {
  159. }
  160. */
  161. public function testSelectColumnsReset()
  162. {
  163. $select = $this->_selectColumnsReset()
  164. ->reset(Zend_Db_Select::COLUMNS)
  165. ->columns('product_name');
  166. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  167. $this->assertEquals('SELECT "p"."product_name" FROM "zfproducts" AS "p"', $sql);
  168. }
  169. /**
  170. * Test support for schema-qualified table names in from()
  171. * e.g. from('schema.table').
  172. */
  173. public function testSelectFromQualified()
  174. {
  175. $select = $this->_selectFromQualified();
  176. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  177. $this->assertEquals('SELECT "zfproducts".* FROM "dummy"."zfproducts"', $sql);
  178. }
  179. public function testSelectFromForUpdate()
  180. {
  181. $select = $this->_db->select()
  182. ->from("zfproducts")
  183. ->forUpdate();
  184. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  185. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" FOR UPDATE', $sql);
  186. }
  187. /**
  188. * Test adding a JOIN to a Zend_Db_Select object.
  189. */
  190. public function testSelectJoin()
  191. {
  192. $select = $this->_selectJoin();
  193. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  194. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id"', $sql);
  195. }
  196. /**
  197. * Test adding an INNER JOIN to a Zend_Db_Select object.
  198. * This should be exactly the same as the plain JOIN clause.
  199. */
  200. public function testSelectJoinWithCorrelationName()
  201. {
  202. $select = $this->_selectJoinWithCorrelationName();
  203. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  204. $this->assertEquals('SELECT "xyz1".*, "xyz2".* FROM "zfproducts" AS "xyz1" INNER JOIN "zfbugs_products" AS "xyz2" ON "xyz1"."product_id" = "xyz2"."product_id" WHERE ("xyz1"."product_id" = 1)', $sql);
  205. }
  206. /**
  207. * Test adding an INNER JOIN to a Zend_Db_Select object.
  208. * This should be exactly the same as the plain JOIN clause.
  209. */
  210. public function testSelectJoinInner()
  211. {
  212. $select = $this->_selectJoinInner();
  213. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  214. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id"', $sql);
  215. }
  216. /**
  217. * Test adding an outer join to a Zend_Db_Select object.
  218. */
  219. public function testSelectJoinLeft()
  220. {
  221. $select = $this->_selectJoinLeft();
  222. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  223. $this->assertEquals('SELECT "zfbugs".*, "zfbugs_products".* FROM "zfbugs" LEFT JOIN "zfbugs_products" ON "zfbugs"."bug_id" = "zfbugs_products"."bug_id"', $sql);
  224. }
  225. /**
  226. * Test adding an outer join to a Zend_Db_Select object.
  227. */
  228. public function testSelectJoinRight()
  229. {
  230. $select = $this->_selectJoinRight();
  231. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  232. $this->assertEquals('SELECT "zfbugs_products".*, "zfbugs".* FROM "zfbugs_products" RIGHT JOIN "zfbugs" ON "zfbugs_products"."bug_id" = "zfbugs"."bug_id"', $sql);
  233. }
  234. /**
  235. * Test adding a cross join to a Zend_Db_Select object.
  236. */
  237. public function testSelectJoinCross()
  238. {
  239. $select = $this->_selectJoinCross();
  240. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  241. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" CROSS JOIN "zfbugs_products"', $sql);
  242. }
  243. /**
  244. * Test support for schema-qualified table names in join(),
  245. * e.g. join('schema.table', 'condition')
  246. */
  247. public function testSelectJoinQualified()
  248. {
  249. $select = $this->_selectJoinQualified();
  250. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  251. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "dummy"."zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id"', $sql);
  252. }
  253. /**
  254. * Test adding a JOIN USING to a Zend_Db_Select object.
  255. */
  256. public function testSelectJoinUsing()
  257. {
  258. $select = $this->_selectJoinUsing();
  259. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  260. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "zfbugs_products" ON "zfbugs_products"."product_id" = "zfproducts"."product_id" WHERE ("zfbugs_products"."product_id" < 3)', $sql);
  261. }
  262. /**
  263. * Test adding a JOIN INNER USING to a Zend_Db_Select object.
  264. */
  265. public function testSelectJoinInnerUsing()
  266. {
  267. $select = $this->_selectJoinInnerUsing();
  268. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  269. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "zfbugs_products" ON "zfbugs_products"."product_id" = "zfproducts"."product_id" WHERE ("zfbugs_products"."product_id" < 3)', $sql);
  270. }
  271. public function testSelectJoinWithNocolumns()
  272. {
  273. $select = $this->_selectJoinWithNocolumns();
  274. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  275. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" INNER JOIN "zfbugs" ON "zfbugs"."bug_id" = 1 INNER JOIN "zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id" AND "zfbugs_products"."bug_id" = "zfbugs"."bug_id"', $sql);
  276. }
  277. /**
  278. * Test adding a WHERE clause to a Zend_Db_Select object.
  279. */
  280. public function testSelectWhere()
  281. {
  282. $select = $this->_selectWhere();
  283. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  284. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2)', $sql);
  285. }
  286. /**
  287. * Test adding an array in the WHERE clause to a Zend_Db_Select object.
  288. */
  289. public function testSelectWhereArray()
  290. {
  291. $select = $this->_selectWhereArray();
  292. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  293. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" IN (1, 2, 3))', $sql);
  294. }
  295. /**
  296. * test adding more WHERE conditions,
  297. * which should be combined with AND by default.
  298. */
  299. public function testSelectWhereAnd()
  300. {
  301. $select = $this->_selectWhereAnd();
  302. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  303. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2) AND ("product_id" = 1)', $sql);
  304. }
  305. /**
  306. * Test support for where() with a parameter,
  307. * e.g. where('id = ?', 1).
  308. */
  309. public function testSelectWhereWithParameter()
  310. {
  311. $select = $this->_selectWhereWithParameter();
  312. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  313. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2)', $sql);
  314. }
  315. /**
  316. * Test support for where() with a parameter,
  317. * e.g. where('id = ?', 1).
  318. */
  319. public function testSelectWhereWithType()
  320. {
  321. $select = $this->_selectWhereWithType();
  322. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  323. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2)', $sql);
  324. }
  325. /**
  326. * Test support for where() with a float parameter,
  327. * e.g. where('id = ?', 1).
  328. */
  329. public function testSelectWhereWithTypeFloat()
  330. {
  331. $select = $this->_selectWhereWithTypeFloat();
  332. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  333. $this->assertEquals('SELECT "zfprice".* FROM "zfprice" WHERE ("price_total" = 200.450000)', $sql);
  334. }
  335. /**
  336. * * Test adding an OR WHERE clause to a Zend_Db_Select object.
  337. */
  338. public function testSelectWhereOr()
  339. {
  340. $select = $this->_selectWhereOr();
  341. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  342. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 1) OR ("product_id" = 2)', $sql);
  343. }
  344. /**
  345. * Test support for where() with a parameter,
  346. * e.g. orWhere('id = ?', 2).
  347. */
  348. public function testSelectWhereOrWithParameter()
  349. {
  350. $select = $this->_selectWhereOrWithParameter();
  351. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  352. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 1) OR ("product_id" = 2)', $sql);
  353. }
  354. /**
  355. * Test adding a GROUP BY clause to a Zend_Db_Select object.
  356. */
  357. public function testSelectGroupBy()
  358. {
  359. $select = $this->_selectGroupBy();
  360. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  361. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" ORDER BY "bug_id" ASC', $sql);
  362. }
  363. /**
  364. * Test support for qualified table in group(),
  365. * e.g. group('schema.table').
  366. */
  367. public function testSelectGroupByQualified()
  368. {
  369. $select = $this->_selectGroupByQualified();
  370. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  371. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "zfbugs_products"."bug_id" ORDER BY "bug_id" ASC', $sql);
  372. }
  373. /**
  374. * Test support for Zend_Db_Expr in group(),
  375. * e.g. group(new Zend_Db_Expr('id+1'))
  376. */
  377. public function testSelectGroupByExpr()
  378. {
  379. $select = $this->_selectGroupByExpr();
  380. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  381. $this->assertEquals('SELECT "bug_id"+1 AS "bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id"+1 ORDER BY "bug_id"+1', $sql);
  382. }
  383. /**
  384. * Test support for automatic conversion of a SQL
  385. * function to a Zend_Db_Expr in group(),
  386. * e.g. group('LOWER(title)') should give the same
  387. * result as group(new Zend_Db_Expr('LOWER(title)')).
  388. */
  389. public function testSelectGroupByAutoExpr()
  390. {
  391. $select = $this->_selectGroupByAutoExpr();
  392. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  393. $this->assertEquals('SELECT ABS("zfbugs_products"."bug_id") AS "bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY ABS("zfbugs_products"."bug_id") ORDER BY ABS("zfbugs_products"."bug_id") ASC', $sql);
  394. }
  395. /**
  396. * Test adding a HAVING clause to a Zend_Db_Select object.
  397. */
  398. public function testSelectHaving()
  399. {
  400. $select = $this->_selectHaving();
  401. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  402. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" HAVING (COUNT(*) > 1) ORDER BY "bug_id" ASC', $sql);
  403. }
  404. public function testSelectHavingAnd()
  405. {
  406. $select = $this->_selectHavingAnd();
  407. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  408. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" HAVING (COUNT(*) > 1) AND (COUNT(*) = 1) ORDER BY "bug_id" ASC', $sql);
  409. }
  410. /**
  411. * Test support for parameter in having(),
  412. * e.g. having('count(*) > ?', 1).
  413. */
  414. public function testSelectHavingWithParameter()
  415. {
  416. $select = $this->_selectHavingWithParameter();
  417. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  418. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" HAVING (COUNT(*) > 1) ORDER BY "bug_id" ASC', $sql);
  419. }
  420. /**
  421. * Test adding a HAVING clause to a Zend_Db_Select object.
  422. */
  423. public function testSelectHavingOr()
  424. {
  425. $select = $this->_selectHavingOr();
  426. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  427. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" HAVING (COUNT(*) > 1) OR (COUNT(*) = 1) ORDER BY "bug_id" ASC', $sql);
  428. }
  429. /**
  430. * Test support for parameter in orHaving(),
  431. * e.g. orHaving('count(*) > ?', 1).
  432. */
  433. public function testSelectHavingOrWithParameter()
  434. {
  435. $select = $this->_selectHavingOrWithParameter();
  436. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  437. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" HAVING (COUNT(*) > 1) OR (COUNT(*) = 1) ORDER BY "bug_id" ASC', $sql);
  438. }
  439. /**
  440. * Test adding an ORDER BY clause to a Zend_Db_Select object.
  441. */
  442. public function testSelectOrderBy()
  443. {
  444. $select = $this->_selectOrderBy();
  445. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  446. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC', $sql);
  447. }
  448. public function testSelectOrderByArray()
  449. {
  450. $select = $this->_selectOrderByArray();
  451. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  452. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_name" ASC, "product_id" ASC', $sql);
  453. }
  454. public function testSelectOrderByAsc()
  455. {
  456. $select = $this->_selectOrderByAsc();
  457. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  458. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC', $sql);
  459. }
  460. public function testSelectOrderByDesc()
  461. {
  462. $select = $this->_selectOrderByDesc();
  463. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  464. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" DESC', $sql);
  465. }
  466. /**
  467. * Test support for qualified table in order(),
  468. * e.g. order('schema.table').
  469. */
  470. public function testSelectOrderByQualified()
  471. {
  472. $select = $this->_selectOrderByQualified();
  473. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  474. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "zfproducts"."product_id" ASC', $sql);
  475. }
  476. /**
  477. * Test support for Zend_Db_Expr in order(),
  478. * e.g. order(new Zend_Db_Expr('id+1')).
  479. */
  480. public function testSelectOrderByExpr()
  481. {
  482. $select = $this->_selectOrderByExpr();
  483. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  484. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY 1', $sql);
  485. }
  486. /**
  487. * Test automatic conversion of SQL functions to
  488. * Zend_Db_Expr, e.g. order('LOWER(title)')
  489. * should give the same result as
  490. * order(new Zend_Db_Expr('LOWER(title)')).
  491. */
  492. public function testSelectOrderByAutoExpr()
  493. {
  494. $select = $this->_selectOrderByAutoExpr();
  495. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  496. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY ABS("zfproducts"."product_id") ASC', $sql);
  497. }
  498. /**
  499. * Test ORDER BY clause that contains multiple lines.
  500. * See ZF-1822, which says that the regexp matching
  501. * ASC|DESC fails when string is multi-line.
  502. */
  503. public function testSelectOrderByMultiLine()
  504. {
  505. $select = $this->_selectOrderByMultiLine();
  506. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  507. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" DESC', $sql);
  508. }
  509. /**
  510. * Test adding a LIMIT clause to a Zend_Db_Select object.
  511. */
  512. public function testSelectLimit()
  513. {
  514. $select = $this->_selectLimit();
  515. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  516. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 0', $sql);
  517. }
  518. /**
  519. * Not applicable in static test
  520. * @group ZF-5263
  521. */
  522. public function testSelectLimitFetchCol()
  523. {}
  524. public function testSelectLimitNone()
  525. {
  526. $select = $this->_selectLimitNone();
  527. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  528. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC', $sql);
  529. }
  530. public function testSelectLimitOffset()
  531. {
  532. $select = $this->_selectLimitOffset();
  533. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  534. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 1', $sql);
  535. }
  536. /**
  537. * Test the limitPage() method of a Zend_Db_Select object.
  538. */
  539. public function testSelectLimitPageOne()
  540. {
  541. $select = $this->_selectLimitPageOne();
  542. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  543. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 0', $sql);
  544. }
  545. public function testSelectLimitPageTwo()
  546. {
  547. $select = $this->_selectLimitPageTwo();
  548. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  549. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 1', $sql);
  550. }
  551. public function testSelectUnionString()
  552. {
  553. $select = $this->_selectUnionString();
  554. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  555. $this->assertEquals('SELECT "bug_id" AS "id", "bug_status" AS "name" FROM "zfbugs" UNION SELECT "product_id" AS "id", "product_name" AS "name" FROM "zfproducts" ORDER BY "id" ASC', $sql);
  556. }
  557. public function testSelectOrderByPosition()
  558. {
  559. $select = $this->_selectOrderByPosition();
  560. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  561. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY 2 ASC', $sql);
  562. }
  563. public function testSelectOrderByPositionAsc()
  564. {
  565. $select = $this->_selectOrderByPositionAsc();
  566. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  567. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY 2 ASC', $sql);
  568. }
  569. public function testSelectOrderByPositionDesc()
  570. {
  571. $select = $this->_selectOrderByPositionDesc();
  572. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  573. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY 2 DESC', $sql);
  574. }
  575. public function testSelectOrderByMultiplePositions()
  576. {
  577. $select = $this->_selectOrderByMultiplePositions();
  578. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  579. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY 2 DESC, 1 DESC', $sql);
  580. }
  581. public function getDriver()
  582. {
  583. return 'Static';
  584. }
  585. }