コード例 #1
0
ファイル: Db.php プロジェクト: tokushima/ebi
 /**
  * コンストラクタ
  * @param string{} $def 接続情報 [type,host,name,port,user,password,sock,encode,timezone]
  */
 public function __construct(array $def = [])
 {
     if (empty($def)) {
         /**
          * @param string{} $connection デフォルトの接続情報 [type,host,name,port,user,password,sock,encode,timezone]
          */
         $def = \ebi\Conf::gets('connection');
     }
     $type = isset($def['type']) ? $def['type'] : null;
     $host = isset($def['host']) ? $def['host'] : null;
     $dbname = isset($def['name']) ? $def['name'] : null;
     $port = isset($def['port']) ? $def['port'] : null;
     $user = isset($def['user']) ? $def['user'] : null;
     $password = isset($def['password']) ? $def['password'] : null;
     $sock = isset($def['sock']) ? $def['sock'] : null;
     $encode = isset($def['encode']) ? $def['encode'] : null;
     $timezone = isset($def['timezone']) ? $def['timezone'] : null;
     if (empty($type)) {
         $type = \ebi\SqliteConnector::type();
     }
     if (empty($encode)) {
         $encode = 'utf8';
     }
     try {
         $type = \ebi\Util::get_class_name($type);
     } catch (\InvalidArgumentException $e) {
         throw new \ebi\exception\ConnectionException('could not find connector `' . $type . '`');
     }
     $r = new \ReflectionClass($type);
     $this->dbname = $dbname;
     $this->connector = $r->newInstanceArgs([$encode, $timezone]);
     if (!$this->connector instanceof \ebi\DbConnector) {
         throw new \ebi\exception\ConnectionException('must be an instance of \\ebi\\DbConnector');
     }
     if (self::$autocommit === null) {
         /**
          * @param boolean $autocommit オートコミットを行うかの真偽値
          */
         self::$autocommit = \ebi\Conf::get('autocommit', false);
     }
     $this->connection = $this->connector->connect($this->dbname, $host, $port, $user, $password, $sock, self::$autocommit);
     if (empty($this->connection)) {
         throw new \ebi\exception\ConnectionException('connection fail ' . $this->dbname);
     }
     if (self::$autocommit !== true) {
         $this->connection->beginTransaction();
     }
 }
コード例 #2
0
ファイル: Helper.php プロジェクト: tokushima/ebi
 /**
  * print_r
  * @param mixed $obj
  */
 public function dump($obj)
 {
     $result = [];
     foreach ($obj as $k => $v) {
         if (isset($obj[$k])) {
             if (!is_array($obj[$k]) || !empty($obj[$k])) {
                 $result[$k] = $v;
             }
         }
         if (is_bool($obj[$k])) {
             $result[$k] = $result[$k] ? 'true' : 'false';
         }
     }
     if ($result['class'] && is_string($result['class'])) {
         $result['class'] = \ebi\Util::get_class_name($result['class']);
     }
     $value = print_r($result, true);
     $value = str_replace('=>' . PHP_EOL, ': ', trim($value));
     $value = preg_replace('/\\[\\d+\\]/', '  \\0', $value);
     return implode(PHP_EOL, array_slice(explode(PHP_EOL, $value), 2, -1));
 }
コード例 #3
0
ファイル: Conf.php プロジェクト: tokushima/ebi
 /**
  * Pluginに遅延セットする
  * @param string $class_name
  * @param string $obj
  */
 public static function set_class_plugin($class_name, $obj = null)
 {
     if (is_array($class_name)) {
         foreach ($class_name as $c => $v) {
             static::set_class_plugin($c, $v);
         }
     } else {
         if (!empty($obj)) {
             $class_name = \ebi\Util::get_class_name($class_name);
             if (!is_array($obj)) {
                 $obj = [$obj];
             }
             foreach ($obj as $o) {
                 if (is_string($o)) {
                     $o = \ebi\Util::get_class_name($o);
                 }
                 self::$plugins[$class_name][] = $o;
             }
         }
     }
 }
コード例 #4
0
ファイル: dao_create_table.php プロジェクト: tokushima/ebi
<?php

/**
 * Create table
 * @param string $model 
 * @param boolean $drop 
 */
$model_list = [];
if (empty($model)) {
    foreach (\ebi\Dt::classes(\ebi\Dao::class) as $class_info) {
        $model_list[] = \ebi\Util::get_class_name($class_info['class']);
    }
} else {
    $model_list[] = \ebi\Util::get_class_name($model);
}
foreach ($model_list as $m) {
    if ($drop === true) {
        call_user_func([$m, 'drop_table']);
        \cmdman\Std::println('dropped ' . $m);
    }
    call_user_func([$m, 'create_table']);
    \cmdman\Std::println('created ' . $m);
}
コード例 #5
0
ファイル: dao_export.php プロジェクト: tokushima/ebi
<?php

/**
 * Data export
 * @param string $file
 */
if (empty($file)) {
    $file = getcwd() . '/dao.dump';
}
\ebi\Util::file_write($file, '');
foreach (\ebi\Dt::classes(\ebi\Dao::class) as $class_info) {
    $class_name = \ebi\Util::get_class_name($class_info['class']);
    $cnt = 0;
    foreach (call_user_func([$class_name, 'find']) as $obj) {
        \ebi\Util::file_append($file, json_encode(['model' => $class_name, 'data' => $obj->props()]) . PHP_EOL);
        $cnt++;
    }
    \cmdman\Std::println_info('Export ' . $class_name . ' (' . $cnt . ')');
}
\cmdman\Std::println_success(PHP_EOL . 'Writen: ' . $file);
コード例 #6
0
ファイル: Dt.php プロジェクト: tokushima/ebi
 /**
  * テーブルを削除後作成する
  */
 public static function reset_tables()
 {
     foreach (\ebi\Dt::classes(\ebi\Dao::class) as $class_info) {
         $class = \ebi\Util::get_class_name($class_info['class']);
         call_user_func([$class, 'drop_table']);
         call_user_func([$class, 'create_table']);
     }
 }
コード例 #7
0
ファイル: check.php プロジェクト: tokushima/ebi
    } catch (\ebi\exception\ConnectionException $e) {
        $failure['db']++;
        \cmdman\Std::println_danger(' ' . $class_name . ' Failure, ' . $e->getMessage());
    } catch (\Exception $e) {
        $failure['db']++;
        \cmdman\Std::println_warning(' ' . $class_name . ' Failure, ' . $e->getMessage());
    }
}
\cmdman\Std::println();
\cmdman\Std::println_info('Entry:');
foreach (\ebi\Util::ls(getcwd()) as $f) {
    $src = file_get_contents($f->getPathname());
    if (strpos($src, '\\ebi\\Flow::app(') !== false) {
        $map = \ebi\Flow::get_map($f->getPathname());
        $entry = str_replace(getcwd(), '', $f->getPathname());
        foreach ($map['patterns'] as $p) {
            if (array_key_exists('action', $p) && is_string($p['action'])) {
                try {
                    list($c, $m) = explode('::', $p['action']);
                    $mr = new \ReflectionMethod(\ebi\Util::get_class_name($c), $m);
                    \cmdman\Std::println_success($entry . ' ' . $p['name'] . ' OK');
                } catch (\ReflectionException $e) {
                    $failure['entry']++;
                    \cmdman\Std::println_danger($entry . ' ' . $p['name'] . ' Failure');
                }
            }
        }
    }
}
\cmdman\Std::println();
\cmdman\Std::println_danger('Failure: ' . (!empty($failure['db']) ? 'Database(' . $failure['db'] . ') ' : '') . (!empty($failure['entry']) ? 'Entry(' . $failure['entry'] . ') ' : ''));