public function up()
    {
        define('ROOT_DIR', realpath(__DIR__ . '/..'));
        // надо исключить realpath из кода и вынести в конфиг
        define('PUBLIC_DIR', ROOT_DIR . '/public');
        define('VENDOR_DIR', ROOT_DIR . '/vendor');
        define('DATA_DIR', ROOT_DIR . '/data');
        $loader = (include ROOT_DIR . "/vendor/autoload.php");
        $app = new Application();
        $app->setLoader($loader);
        $app->init();
        $epoch = $app->getConfig()->get(["UUID", "complexShort", "epoch"], 1451317149374);
        $shard = $app->getConfig(["UUID", "complexShort", "shard"], 1);
        $sql = "create sequence uuid_complex_short_part;";
        $this->execute($sql);
        $sql = <<<sql
CREATE OR REPLACE FUNCTION uuid_short_complex(OUT result bigint) AS \$\$
DECLARE
    our_epoch bigint := {$epoch};
    seq_id bigint;
    now_millis bigint;
    shard_id int := {$shard};
BEGIN
    SELECT nextval('uuid_complex_short_part') % 1024 INTO seq_id;

SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO now_millis;
    result := (now_millis - our_epoch) << 23;
    result := result | (shard_id << 10);
    result := result | (seq_id);
END;
\$\$ LANGUAGE PLPGSQL;
sql;
        $this->execute($sql);
    }
Пример #2
0
 public static function init(ModuleManager $moduleManager, Application $application)
 {
     $application->extend("DeltaPhp\\Operator", function (Operator $operator, Container $c) use($moduleManager) {
         $workers = $moduleManager->getListArrayConfigs("workers");
         foreach ($workers as $workerName => $data) {
             $workerParams = [];
             if (is_callable($data)) {
                 $function = $data;
             } elseif (is_array($data)) {
                 foreach ($data as $key => $row) {
                     if (is_callable($row)) {
                         $function = $row;
                     } else {
                         switch ($key) {
                             case WorkerInterface::PARAM_TABLEID:
                                 $operator->setWorkerTable($row, $workerName);
                                 $workerParams[WorkerInterface::PARAM_TABLEID] = $row;
                                 break;
                             case WorkerInterface::PARAM_ACTIONS_MAP:
                                 foreach ($row as $action => $actionParam) {
                                     if (!is_array($actionParam)) {
                                         $operator->addAction($action, $workerName, $actionParam);
                                     } else {
                                         foreach ($actionParam as $class => $order) {
                                             $operator->addAction($action, $workerName, $class, $order);
                                         }
                                     }
                                 }
                                 break;
                             default:
                                 $workerParams[$key] = $row;
                                 break;
                         }
                     }
                 }
             }
             $operator->addWorker($workerName, $function);
             $operator->setWorkerParams($workerName, $workerParams);
         }
         return $operator;
     });
 }