protected function get_applied_migrations()
 {
     $this->ensure_schema_version_table();
     $cmd = new SDBCommand("SELECT `id` FROM @schema_name ORDER BY `id`");
     $cmd->set('schema_name', self::SCHEMA_NAME, SDB::TableName);
     $rows = $cmd->get_all();
     return array_map(create_function('$r', 'return $r["id"];'), $rows);
 }
 protected function do_get_tables_list()
 {
     // **TODO**: read about 'sqlite_temp_master'
     $cmd = new SDBCommand("SELECT \"name\" FROM sqlite_master WHERE \"type\"='table'");
     $res = $cmd->get_all();
     $arr = array();
     foreach ($res as $row) {
         $name = first_value($row);
         if (strlen($this->prefix) && strpos($name, $this->prefix) === 0) {
             $name = substr($name, strlen($this->prefix));
         }
         $arr[] = $name;
     }
     return $arr;
 }
        $cmd->set('name', 'Name #' . md5(now()), SDB::String);
        $cmd->set('date_created', now(), SDB::DateTime);
        $cmd->execute();
        echo 'ok';
        break;
    case 'list':
        $cmd = new SDBCommand("SELECT * FROM some_items");
        $arr = $cmd->get_all();
        echo '<pre>';
        echo "<b><u>id\tname\t\t\t\t\tdate_created\t   </u></b>\n";
        foreach ($arr as $row) {
            echo $row['id'] . "\t" . $row['name'] . "\t" . $row['date_created'] . "\n";
        }
        echo '</pre>';
        break;
    case 'remove':
        $cmd = new SDBCommand("SELECT id FROM some_items");
        $ids = $cmd->get_all();
        $id = $ids[rand() % count($ids)]['id'];
        $cmd = new SDBCommand("DELETE FROM some_items WHERE id=@id");
        $cmd->set('id', $id, SDB::Int);
        $cmd->execute();
        echo 'ok';
        break;
    case 'clear':
        $cmd = new SDBCommand("DELETE FROM some_items");
        $cmd->execute();
        echo 'ok';
        break;
}
echo_debug();
 public function move($full_path, $position)
 {
     if ($full_path == $this->path . $this->name && $position == $this->position) {
         return;
     }
     self::lock();
     $prev_path = $this->path;
     if ($full_path != $this->path . $this->name) {
         // Проапдейтить позицию в папке **откуда** была нода
         $this->update_positions();
         $cmd = new SDBCommand("SELECT id,path FROM nodes WHERE path LIKE @path");
         $cmd->set('path', $this->path . $this->name . '/%', SDB::String, self::PathSize);
         $arr = $cmd->get_all();
         $len = strlen($this->path . $this->name);
         $cmd = new SDBCommand("UPDATE nodes SET path=@path WHERE id=@id");
         $cmd->set('id', null, SDB::Int);
         $cmd->set('path', null, SDB::String, self::PathSize);
         foreach ($arr as $row) {
             $cmd->set('id', $row['id']);
             $cmd->set('path', $full_path . substr($row['path'], $len));
             $cmd->execute();
         }
         self::path_parts($full_path, $path, $name);
         $this->path = $path;
         $this->name = $name;
         $this->_childs = null;
         $this->_parent_node = false;
     }
     if ($prev_path != $this->path || $position != $this->position) {
         // Проапдейтить позицию в папке **куда** переместилась нода
         $pos = $this->update_positions($position);
         $this->position = $position == 0 || $position > $pos ? $pos : $position;
     }
     $this->save();
     self::unlock();
 }