compiler.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php namespace System\DB\Query;
  2. class Compiler {
  3. /**
  4. * Build a SQL SELECT statement.
  5. *
  6. * @param Query $query
  7. * @return string
  8. */
  9. public static function select($query)
  10. {
  11. $sql = $query->select.' '.$query->from.' '.$query->where;
  12. if (count($query->orderings) > 0)
  13. {
  14. $sql .= ' ORDER BY '.implode(', ', $query->orderings);
  15. }
  16. if ( ! is_null($query->limit))
  17. {
  18. $sql .= ' LIMIT '.$query->limit;
  19. }
  20. if ( ! is_null($query->offset))
  21. {
  22. $sql .= ' OFFSET '.$query->offset;
  23. }
  24. return $sql;
  25. }
  26. /**
  27. * Build a SQL INSERT statement.
  28. *
  29. * @param Query $query
  30. * @param array $values
  31. * @return string
  32. */
  33. public static function insert($query, $values)
  34. {
  35. $sql = 'INSERT INTO '.$query->table.' (';
  36. // ---------------------------------------------------
  37. // Wrap each column name in keyword identifiers.
  38. // ---------------------------------------------------
  39. $columns = array();
  40. foreach (array_keys($values) as $column)
  41. {
  42. $columns[] = $query->wrap($column);
  43. }
  44. return $sql .= implode(', ', $columns).') VALUES ('.$query->parameterize($values).')';
  45. }
  46. /**
  47. * Build a SQL UPDATE statement.
  48. *
  49. * @param Query $query
  50. * @param array $values
  51. * @return string
  52. */
  53. public static function update($query, $values)
  54. {
  55. $sql = 'UPDATE '.$query->table.' SET ';
  56. // ---------------------------------------------------
  57. // Add each column set the query.
  58. // ---------------------------------------------------
  59. $columns = array();
  60. foreach (array_keys($values) as $column)
  61. {
  62. $columns[] = $query->wrap($column).' = ?';
  63. }
  64. return $sql .= implode(', ', $columns).' '.$query->where;
  65. }
  66. /**
  67. * Build a SQL DELETE statement.
  68. *
  69. * @param Query $query
  70. * @return string
  71. */
  72. public static function delete($query)
  73. {
  74. return 'DELETE FROM '.$query->wrap($query->table).' '.$query->where;
  75. }
  76. }