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

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