StaticTest.php 23 KB

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