StaticTest.php 24 KB

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