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

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