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>