StaticTest.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  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_Table_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_Table_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 adding the FOR UPDATE query modifier to a Zend_Db_Select object.
  154. *
  155. public function testSelectForUpdateModifier()
  156. {
  157. }
  158. */
  159. public function testSelectColumnsReset()
  160. {
  161. $select = $this->_selectColumnsReset()
  162. ->reset(Zend_Db_Select::COLUMNS)
  163. ->columns('product_name');
  164. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  165. $this->assertEquals('SELECT "p"."product_name" FROM "zfproducts" AS "p"', $sql);
  166. }
  167. /**
  168. * Test support for schema-qualified table names in from()
  169. * e.g. from('schema.table').
  170. */
  171. public function testSelectFromQualified()
  172. {
  173. $select = $this->_selectFromQualified();
  174. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  175. $this->assertEquals('SELECT "zfproducts".* FROM "dummy"."zfproducts"', $sql);
  176. }
  177. public function testSelectFromForUpdate()
  178. {
  179. $select = $this->_db->select()
  180. ->from("zfproducts")
  181. ->forUpdate();
  182. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  183. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" FOR UPDATE', $sql);
  184. }
  185. /**
  186. * Test adding a JOIN to a Zend_Db_Select object.
  187. */
  188. public function testSelectJoin()
  189. {
  190. $select = $this->_selectJoin();
  191. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  192. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id"', $sql);
  193. }
  194. /**
  195. * Test adding an INNER JOIN to a Zend_Db_Select object.
  196. * This should be exactly the same as the plain JOIN clause.
  197. */
  198. public function testSelectJoinWithCorrelationName()
  199. {
  200. $select = $this->_selectJoinWithCorrelationName();
  201. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  202. $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);
  203. }
  204. /**
  205. * Test adding an INNER JOIN to a Zend_Db_Select object.
  206. * This should be exactly the same as the plain JOIN clause.
  207. */
  208. public function testSelectJoinInner()
  209. {
  210. $select = $this->_selectJoinInner();
  211. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  212. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id"', $sql);
  213. }
  214. /**
  215. * Test adding an outer join to a Zend_Db_Select object.
  216. */
  217. public function testSelectJoinLeft()
  218. {
  219. $select = $this->_selectJoinLeft();
  220. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  221. $this->assertEquals('SELECT "zfbugs".*, "zfbugs_products".* FROM "zfbugs" LEFT JOIN "zfbugs_products" ON "zfbugs"."bug_id" = "zfbugs_products"."bug_id"', $sql);
  222. }
  223. /**
  224. * Test adding an outer join to a Zend_Db_Select object.
  225. */
  226. public function testSelectJoinRight()
  227. {
  228. $select = $this->_selectJoinRight();
  229. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  230. $this->assertEquals('SELECT "zfbugs_products".*, "zfbugs".* FROM "zfbugs_products" RIGHT JOIN "zfbugs" ON "zfbugs_products"."bug_id" = "zfbugs"."bug_id"', $sql);
  231. }
  232. /**
  233. * Test adding a cross join to a Zend_Db_Select object.
  234. */
  235. public function testSelectJoinCross()
  236. {
  237. $select = $this->_selectJoinCross();
  238. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  239. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" CROSS JOIN "zfbugs_products"', $sql);
  240. }
  241. /**
  242. * Test support for schema-qualified table names in join(),
  243. * e.g. join('schema.table', 'condition')
  244. */
  245. public function testSelectJoinQualified()
  246. {
  247. $select = $this->_selectJoinQualified();
  248. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  249. $this->assertEquals('SELECT "zfproducts".*, "zfbugs_products".* FROM "zfproducts" INNER JOIN "dummy"."zfbugs_products" ON "zfproducts"."product_id" = "zfbugs_products"."product_id"', $sql);
  250. }
  251. /**
  252. * Test adding a JOIN USING to a Zend_Db_Select object.
  253. */
  254. public function testSelectJoinUsing()
  255. {
  256. $select = $this->_selectJoinUsing();
  257. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  258. $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);
  259. }
  260. /**
  261. * Test adding a JOIN INNER USING to a Zend_Db_Select object.
  262. */
  263. public function testSelectJoinInnerUsing()
  264. {
  265. $select = $this->_selectJoinInnerUsing();
  266. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  267. $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);
  268. }
  269. public function testSelectJoinWithNocolumns()
  270. {
  271. $select = $this->_selectJoinWithNocolumns();
  272. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  273. $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);
  274. }
  275. /**
  276. * Test adding a WHERE clause to a Zend_Db_Select object.
  277. */
  278. public function testSelectWhere()
  279. {
  280. $select = $this->_selectWhere();
  281. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  282. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2)', $sql);
  283. }
  284. /**
  285. * Test adding an array in the WHERE clause to a Zend_Db_Select object.
  286. */
  287. public function testSelectWhereArray()
  288. {
  289. $select = $this->_selectWhereArray();
  290. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  291. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" IN (1, 2, 3))', $sql);
  292. }
  293. /**
  294. * test adding more WHERE conditions,
  295. * which should be combined with AND by default.
  296. */
  297. public function testSelectWhereAnd()
  298. {
  299. $select = $this->_selectWhereAnd();
  300. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  301. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2) AND ("product_id" = 1)', $sql);
  302. }
  303. /**
  304. * Test support for where() with a parameter,
  305. * e.g. where('id = ?', 1).
  306. */
  307. public function testSelectWhereWithParameter()
  308. {
  309. $select = $this->_selectWhereWithParameter();
  310. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  311. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2)', $sql);
  312. }
  313. /**
  314. * Test support for where() with a parameter,
  315. * e.g. where('id = ?', 1).
  316. */
  317. public function testSelectWhereWithType()
  318. {
  319. $select = $this->_selectWhereWithType();
  320. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  321. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 2)', $sql);
  322. }
  323. /**
  324. * Test support for where() with a float parameter,
  325. * e.g. where('id = ?', 1).
  326. */
  327. public function testSelectWhereWithTypeFloat()
  328. {
  329. $select = $this->_selectWhereWithTypeFloat();
  330. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  331. $this->assertEquals('SELECT "zfprice".* FROM "zfprice" WHERE ("price_total" = 200.450000)', $sql);
  332. }
  333. /**
  334. * * Test adding an OR WHERE clause to a Zend_Db_Select object.
  335. */
  336. public function testSelectWhereOr()
  337. {
  338. $select = $this->_selectWhereOr();
  339. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  340. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 1) OR ("product_id" = 2)', $sql);
  341. }
  342. /**
  343. * Test support for where() with a parameter,
  344. * e.g. orWhere('id = ?', 2).
  345. */
  346. public function testSelectWhereOrWithParameter()
  347. {
  348. $select = $this->_selectWhereOrWithParameter();
  349. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  350. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" WHERE ("product_id" = 1) OR ("product_id" = 2)', $sql);
  351. }
  352. /**
  353. * Test adding a GROUP BY clause to a Zend_Db_Select object.
  354. */
  355. public function testSelectGroupBy()
  356. {
  357. $select = $this->_selectGroupBy();
  358. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  359. $this->assertEquals('SELECT "zfbugs_products"."bug_id", COUNT(*) AS "thecount" FROM "zfbugs_products" GROUP BY "bug_id" ORDER BY "bug_id" ASC', $sql);
  360. }
  361. /**
  362. * Test support for qualified table in group(),
  363. * e.g. group('schema.table').
  364. */
  365. public function testSelectGroupByQualified()
  366. {
  367. $select = $this->_selectGroupByQualified();
  368. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  369. $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);
  370. }
  371. /**
  372. * Test support for Zend_Db_Expr in group(),
  373. * e.g. group(new Zend_Db_Expr('id+1'))
  374. */
  375. public function testSelectGroupByExpr()
  376. {
  377. $select = $this->_selectGroupByExpr();
  378. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  379. $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);
  380. }
  381. /**
  382. * Test support for automatic conversion of a SQL
  383. * function to a Zend_Db_Expr in group(),
  384. * e.g. group('LOWER(title)') should give the same
  385. * result as group(new Zend_Db_Expr('LOWER(title)')).
  386. */
  387. public function testSelectGroupByAutoExpr()
  388. {
  389. $select = $this->_selectGroupByAutoExpr();
  390. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  391. $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);
  392. }
  393. /**
  394. * Test adding a HAVING clause to a Zend_Db_Select object.
  395. */
  396. public function testSelectHaving()
  397. {
  398. $select = $this->_selectHaving();
  399. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  400. $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);
  401. }
  402. public function testSelectHavingAnd()
  403. {
  404. $select = $this->_selectHavingAnd();
  405. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  406. $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);
  407. }
  408. /**
  409. * Test support for parameter in having(),
  410. * e.g. having('count(*) > ?', 1).
  411. */
  412. public function testSelectHavingWithParameter()
  413. {
  414. $select = $this->_selectHavingWithParameter();
  415. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  416. $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);
  417. }
  418. /**
  419. * Test adding a HAVING clause to a Zend_Db_Select object.
  420. */
  421. public function testSelectHavingOr()
  422. {
  423. $select = $this->_selectHavingOr();
  424. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  425. $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);
  426. }
  427. /**
  428. * Test support for parameter in orHaving(),
  429. * e.g. orHaving('count(*) > ?', 1).
  430. */
  431. public function testSelectHavingOrWithParameter()
  432. {
  433. $select = $this->_selectHavingOrWithParameter();
  434. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  435. $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);
  436. }
  437. /**
  438. * Test adding an ORDER BY clause to a Zend_Db_Select object.
  439. */
  440. public function testSelectOrderBy()
  441. {
  442. $select = $this->_selectOrderBy();
  443. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  444. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC', $sql);
  445. }
  446. public function testSelectOrderByArray()
  447. {
  448. $select = $this->_selectOrderByArray();
  449. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  450. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_name" ASC, "product_id" ASC', $sql);
  451. }
  452. public function testSelectOrderByAsc()
  453. {
  454. $select = $this->_selectOrderByAsc();
  455. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  456. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC', $sql);
  457. }
  458. public function testSelectOrderByDesc()
  459. {
  460. $select = $this->_selectOrderByDesc();
  461. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  462. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" DESC', $sql);
  463. }
  464. /**
  465. * Test support for qualified table in order(),
  466. * e.g. order('schema.table').
  467. */
  468. public function testSelectOrderByQualified()
  469. {
  470. $select = $this->_selectOrderByQualified();
  471. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  472. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "zfproducts"."product_id" ASC', $sql);
  473. }
  474. /**
  475. * Test support for Zend_Db_Expr in order(),
  476. * e.g. order(new Zend_Db_Expr('id+1')).
  477. */
  478. public function testSelectOrderByExpr()
  479. {
  480. $select = $this->_selectOrderByExpr();
  481. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  482. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY 1', $sql);
  483. }
  484. /**
  485. * Test automatic conversion of SQL functions to
  486. * Zend_Db_Expr, e.g. order('LOWER(title)')
  487. * should give the same result as
  488. * order(new Zend_Db_Expr('LOWER(title)')).
  489. */
  490. public function testSelectOrderByAutoExpr()
  491. {
  492. $select = $this->_selectOrderByAutoExpr();
  493. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  494. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY ABS("zfproducts"."product_id") ASC', $sql);
  495. }
  496. /**
  497. * Test ORDER BY clause that contains multiple lines.
  498. * See ZF-1822, which says that the regexp matching
  499. * ASC|DESC fails when string is multi-line.
  500. */
  501. public function testSelectOrderByMultiLine()
  502. {
  503. $select = $this->_selectOrderByMultiLine();
  504. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  505. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" DESC', $sql);
  506. }
  507. /**
  508. * Test adding a LIMIT clause to a Zend_Db_Select object.
  509. */
  510. public function testSelectLimit()
  511. {
  512. $select = $this->_selectLimit();
  513. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  514. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 0', $sql);
  515. }
  516. /**
  517. * Not applicable in static test
  518. * @group ZF-5263
  519. */
  520. public function testSelectLimitFetchCol()
  521. {}
  522. public function testSelectLimitNone()
  523. {
  524. $select = $this->_selectLimitNone();
  525. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  526. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC', $sql);
  527. }
  528. public function testSelectLimitOffset()
  529. {
  530. $select = $this->_selectLimitOffset();
  531. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  532. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 1', $sql);
  533. }
  534. /**
  535. * Test the limitPage() method of a Zend_Db_Select object.
  536. */
  537. public function testSelectLimitPageOne()
  538. {
  539. $select = $this->_selectLimitPageOne();
  540. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  541. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 0', $sql);
  542. }
  543. public function testSelectLimitPageTwo()
  544. {
  545. $select = $this->_selectLimitPageTwo();
  546. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  547. $this->assertEquals('SELECT "zfproducts".* FROM "zfproducts" ORDER BY "product_id" ASC LIMIT 1 OFFSET 1', $sql);
  548. }
  549. public function testSelectUnionString()
  550. {
  551. $select = $this->_selectUnionString();
  552. $sql = preg_replace('/\\s+/', ' ', $select->__toString());
  553. $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);
  554. }
  555. public function getDriver()
  556. {
  557. return 'Static';
  558. }
  559. }