UnionExpression.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB\Sql;
  7. use Magento\Framework\DB\Select;
  8. /**
  9. * Class UnionExpression
  10. */
  11. class UnionExpression extends Expression
  12. {
  13. /**
  14. * @var Select[]
  15. */
  16. protected $parts;
  17. /**
  18. * @var string
  19. */
  20. protected $type;
  21. /**
  22. * @var string
  23. */
  24. protected $pattern;
  25. /**
  26. * @param Select[] $parts
  27. * @param string $type (optional)
  28. * @param string $pattern (optional)
  29. */
  30. public function __construct(array $parts, $type = Select::SQL_UNION, $pattern = '')
  31. {
  32. $this->parts = $parts;
  33. $this->type = $type;
  34. $this->pattern = $pattern;
  35. }
  36. /**
  37. * @inheritdoc
  38. */
  39. public function __toString()
  40. {
  41. $parts = [];
  42. foreach ($this->parts as $part) {
  43. if ($part instanceof Select) {
  44. $parts[] = sprintf('(%s)', $part->assemble());
  45. } else {
  46. $parts[] = $part;
  47. }
  48. }
  49. $sql = implode($parts, $this->type);
  50. if ($this->pattern) {
  51. return sprintf($this->pattern, $sql);
  52. }
  53. return $sql;
  54. }
  55. }