api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ColumnConverter.php 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Database;
  3. use Tqdev\PhpCrudApi\Column\Reflection\ReflectedColumn;
  4. class ColumnConverter
  5. {
  6. private $driver;
  7. public function __construct(string $driver)
  8. {
  9. $this->driver = $driver;
  10. }
  11. public function convertColumnValue(ReflectedColumn $column): string
  12. {
  13. if ($column->isBinary()) {
  14. switch ($this->driver) {
  15. case 'mysql':
  16. return "FROM_BASE64(?)";
  17. case 'pgsql':
  18. return "decode(?, 'base64')";
  19. case 'sqlsrv':
  20. return "CONVERT(XML, ?).value('.','varbinary(max)')";
  21. }
  22. }
  23. if ($column->isGeometry()) {
  24. switch ($this->driver) {
  25. case 'mysql':
  26. case 'pgsql':
  27. return "ST_GeomFromText(?)";
  28. case 'sqlsrv':
  29. return "geometry::STGeomFromText(?,0)";
  30. }
  31. }
  32. return '?';
  33. }
  34. public function convertColumnName(ReflectedColumn $column, $value): string
  35. {
  36. if ($column->isBinary()) {
  37. switch ($this->driver) {
  38. case 'mysql':
  39. return "TO_BASE64($value) as $value";
  40. case 'pgsql':
  41. return "encode($value::bytea, 'base64') as $value";
  42. case 'sqlsrv':
  43. return "CASE WHEN $value IS NULL THEN NULL ELSE (SELECT CAST($value as varbinary(max)) FOR XML PATH(''), BINARY BASE64) END as $value";
  44. }
  45. }
  46. if ($column->isGeometry()) {
  47. switch ($this->driver) {
  48. case 'mysql':
  49. case 'pgsql':
  50. return "ST_AsText($value) as $value";
  51. case 'sqlsrv':
  52. return "REPLACE($value.STAsText(),' (','(') as $value";
  53. }
  54. }
  55. return $value;
  56. }
  57. }