Wrapper.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace Schema;
  3. use Schema\Db\Table as Table;
  4. use Schema\Db\Adapter\PostgresAdapter;
  5. use Schema\Db\Adapter\MysqlAdapter;
  6. use Schema\Db\Adapter\SQLiteAdapter;
  7. use Schema\Db\Adapter\SqlServerAdapter;
  8. /*
  9. * @ctag Wrapper::get_table('table');
  10. * @ctag Wrapper::exec('table');
  11. *
  12. * @ctag $table->addColumn('column', 'type', $options = array());
  13. * @ctag $table->addColumn('column', 'string', $options = array( 'null' => true, 'default' => '' ) );
  14. * @ctag $table->addColumn('column', 'integer', $options = array( 'null' => true, 'default' => 0 ) );
  15. * @ctag $table->addColumn('column', 'text', $options = array( 'null' => true, 'default'=> '' ) );
  16. * @ctag $table->hasColumn('column');
  17. *
  18. * @ctag $table->addTimestamps();
  19. * @ctag $table->addTimestamps('created_at', 'updated_at');
  20. * @ctag $table->addSoftDelete();
  21. * @ctag $table->addSoftDelete($deletedAtColumnName = 'deleted_at');
  22. *
  23. * @ctag $table->addSoftDelete();
  24. * @ctag $table->removeColumn('column');
  25. * @ctag $table->renameColumn('column', 'newName');
  26. * @ctag $table->changeColumn('column', 'type', $options = array());
  27. *
  28. * @ctag $table->addForeignKey(Array('column'), 'remoteTable', Array('remoteColumn'), $options = array());
  29. * @ctag $table->addIndex($columns, $options = array());
  30. *
  31. */
  32. class Wrapper{
  33. private static $_instance;
  34. public $_adapter;
  35. public $_driver;
  36. function __construct(){ }
  37. //SINGLETON==============================================
  38. private static function newObj(){
  39. if (!isset(self::$_instance)) {
  40. self::$_instance = new Wrapper();
  41. }
  42. return self::$_instance;
  43. }
  44. public static function getInstance(){
  45. if (!isset(self::$_instance)) {
  46. return self::newObj();
  47. }
  48. return self::$_instance;
  49. }
  50. //=======================================================
  51. public static function set_driver(\PDO $driver){
  52. $instance = self::getInstance();
  53. $instance->_driver = $driver;
  54. switch ($driver->getAttribute(\PDO::ATTR_DRIVER_NAME)){
  55. case 'sqlite':
  56. $instance->_adapter = new SQLiteAdapter();
  57. $instance-> _adapter->setConnection($driver);
  58. break;
  59. case 'pgsql':
  60. $instance->_adapter = new PostgresAdapter();
  61. $instance->_adapter->setConnection($driver);
  62. break;
  63. case 'mysql':
  64. break;
  65. default:
  66. break;
  67. }
  68. }
  69. public static function get_table($name){
  70. $instance = self::getInstance();
  71. if( $instance->_adapter->getConnection()->prefix ){
  72. $name = $instance->_adapter->getConnection()->prefix . $name;
  73. }
  74. return new Table($name, Array(), $instance->_adapter);
  75. }
  76. public static function begin(){
  77. $instance = self::getInstance();
  78. $instance->_adapter->beginTransaction();
  79. }
  80. public static function commit(){
  81. $instance = self::getInstance();
  82. $instance->_adapter->commitTransaction();
  83. }
  84. public static function exec($sql){
  85. $instance = self::getInstance();
  86. $prefix = $instance->_adapter->getConnection()->prefix;
  87. $sql = preg_replace('/{(.*)}/', "$prefix$1", $sql);
  88. $instance->_driver->exec($sql);
  89. }
  90. }