Annotation of embedaddon/php/ext/sqlite/tests/sqlite_spl_001.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: sqlite-spl: Iteration
        !             3: --SKIPIF--
        !             4: <?php # vim:ft=php
        !             5: if (!extension_loaded("sqlite")) print "skip"; 
        !             6: if (!extension_loaded("spl")) print "skip SPL is not present"; 
        !             7: ?>
        !             8: --FILE--
        !             9: <?php
        !            10: include "blankdb_oo.inc";
        !            11: 
        !            12: $db->query("CREATE TABLE menu(id_l int PRIMARY KEY, id_r int UNIQUE, key VARCHAR(10))");
        !            13: $db->query("INSERT INTO menu VALUES( 1, 12, 'A')"); 
        !            14: $db->query("INSERT INTO menu VALUES( 2,  9, 'B')"); 
        !            15: $db->query("INSERT INTO menu VALUES(10, 11, 'F')"); 
        !            16: $db->query("INSERT INTO menu VALUES( 3,  6, 'C')"); 
        !            17: $db->query("INSERT INTO menu VALUES( 7,  8, 'E')"); 
        !            18: $db->query("INSERT INTO menu VALUES( 4,  5, 'D')"); 
        !            19: 
        !            20: class SqliteNestedsetElement
        !            21: {
        !            22:        protected $id_l;
        !            23:        protected $id_r;
        !            24:        protected $key;
        !            25: 
        !            26:        function __construct($db)
        !            27:        {
        !            28:                $this->db = $db;
        !            29:        }
        !            30:        
        !            31:        function getLeft()
        !            32:        {
        !            33:                return $this->id_l;
        !            34:        }
        !            35:        
        !            36:        function getRight()
        !            37:        {
        !            38:                return $this->id_r;
        !            39:        }
        !            40:        
        !            41:        function __toString()
        !            42:        {
        !            43:                return $this->key;
        !            44:        }
        !            45: 
        !            46:        function key()
        !            47:        {
        !            48:                return $this->key;
        !            49:        }
        !            50: }
        !            51: 
        !            52: class SqliteNestedset implements RecursiveIterator
        !            53: {
        !            54:        protected $id;
        !            55:        protected $id_l;
        !            56:        protected $id_r;
        !            57:        protected $entry;
        !            58: 
        !            59:        function __construct($db, $id_l = 1)
        !            60:        {
        !            61:                $this->db = $db;
        !            62:                $this->id_l = $id_l;
        !            63:                $this->id_r = $this->db->singleQuery('SELECT id_r FROM menu WHERE id_l='.$id_l, 1);
        !            64:                $this->id = $id_l;
        !            65:        }
        !            66:        
        !            67:        function rewind()
        !            68:        {
        !            69:                $this->id = $this->id_l;
        !            70:                $this->fetch();
        !            71:        }
        !            72: 
        !            73:        function valid()
        !            74:        {
        !            75:                return is_object($this->entry);
        !            76:        }
        !            77:        
        !            78:        function current()
        !            79:        {
        !            80:                return $this->entry->__toString();
        !            81:        }
        !            82:        
        !            83:        function key()
        !            84:        {
        !            85:                return $this->entry->key();;
        !            86:        }
        !            87:        
        !            88:        function next()
        !            89:        {
        !            90:                $this->id = $this->entry->getRight() + 1;
        !            91:                $this->fetch();
        !            92:        }
        !            93: 
        !            94:        protected function fetch()
        !            95:        {
        !            96:                $res = $this->db->unbufferedQuery('SELECT * FROM menu WHERE id_l='.$this->id);
        !            97:                $this->entry = $res->fetchObject('SqliteNestedsetElement', array(&$this->db));
        !            98:                unset($res);
        !            99:        }
        !           100:        
        !           101:        function hasChildren()
        !           102:        {
        !           103:                return $this->entry->getLeft() + 1 < $this->entry->getRight();
        !           104:        }
        !           105:        
        !           106:        function getChildren()
        !           107:        {
        !           108:                return new SqliteNestedset($this->db, $this->entry->getLeft() + 1, $this->entry->getRight() - 1);
        !           109:        }
        !           110: }
        !           111: 
        !           112: $menu_iterator = new RecursiveIteratorIterator(new SqliteNestedset($db), RecursiveIteratorIterator::SELF_FIRST);
        !           113: foreach($menu_iterator as $entry) {
        !           114:        echo $menu_iterator->getDepth() . $entry . "\n";
        !           115: }
        !           116: ?>
        !           117: ===DONE===
        !           118: --EXPECT--
        !           119: 0A
        !           120: 1B
        !           121: 2C
        !           122: 3D
        !           123: 2E
        !           124: 1F
        !           125: ===DONE===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>