ColumnsRenderer.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB\Select;
  7. use Magento\Framework\DB\Select;
  8. use Magento\Framework\DB\Platform\Quote;
  9. /**
  10. * Class ColumnsRenderer
  11. */
  12. class ColumnsRenderer implements RendererInterface
  13. {
  14. /**
  15. * @var Quote
  16. */
  17. protected $quote;
  18. /**
  19. * @param Quote $quote
  20. */
  21. public function __construct(
  22. Quote $quote
  23. ) {
  24. $this->quote = $quote;
  25. }
  26. /**
  27. * Render COLUMNS section
  28. *
  29. * @param Select $select
  30. * @param string $sql
  31. * @return null|string
  32. * @throws \Zend_Db_Select_Exception
  33. */
  34. public function render(Select $select, $sql = '')
  35. {
  36. if (!count($select->getPart(Select::COLUMNS))) {
  37. return null;
  38. }
  39. $columns = [];
  40. foreach ($select->getPart(Select::COLUMNS) as $columnEntry) {
  41. list($correlationName, $column, $alias) = $columnEntry;
  42. if ($column instanceof \Zend_Db_Expr) {
  43. $columns[] = $this->quote->quoteColumnAs($column, $alias);
  44. } else {
  45. if ($column == Select::SQL_WILDCARD) {
  46. $column = new \Zend_Db_Expr(Select::SQL_WILDCARD);
  47. $alias = null;
  48. }
  49. if (empty($correlationName)) {
  50. $columns[] = $this->quote->quoteColumnAs($column, $alias);
  51. } else {
  52. $columns[] = $this->quote->quoteColumnAs([$correlationName, $column], $alias);
  53. }
  54. }
  55. }
  56. return $sql . ' ' . implode(', ', $columns);
  57. }
  58. }