Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
--TEST--
2
XML_Query2XML::enableDebugLog() with $options['sql_options']['cached'] = true
3
--SKIPIF--
4
<?php $db_layers = array('MDB2', 'DB'); require_once dirname(dirname(__FILE__)) . '/skipif.php'; ?>
5
--FILE--
6
<?php
7
    require_once 'XML/Query2XML.php';
8
    require_once dirname(dirname(__FILE__)) . '/db_init.php';
9
 
10
    class MyLogger
11
    {
12
        public $data = '';
13
        public function log($str)
14
        {
15
            $this->data .= $str . "\n";
16
        }
17
    }
18
 
19
 
20
    class MyDriver extends XML_Query2XML_Driver
21
    {
22
        public function __construct($driver, $logger)
23
        {
24
            $this->_driver = $driver;
25
            $this->_logger = $logger;
26
        }
27
 
28
        public function getAllRecords($sql, $configPath)
29
        {
30
            // this allows us to notice when the results are fetched from the DB
31
            if (strpos($sql['query'], '?', 42) !== false) {
32
                $query = substr($sql['query'], 0, strpos($sql['query'], '?', 42)+1);
33
            } else {
34
                $query = $sql['query'];
35
            }
36
            $this->_logger->log(
37
                'FROM DB: ' . $query
38
            );
39
            return $this->_driver->getAllRecords($sql, $configPath);
40
        }
41
 
42
        public function preprocessQuery(&$query, $configPath)
43
        {
44
            return $this->_driver->preprocessQuery($query, $configPath);
45
        }
46
    }
47
 
48
    $debugLogger = new MyLogger();
49
    $driver = XML_Query2XML_Driver::factory($db);
50
    $query2xml = XML_Query2XML::factory(new MyDriver($driver, $debugLogger));
51
    $query2xml->enableDebugLog($debugLogger);
52
    $dom =& $query2xml->getXML(
53
        'SELECT * FROM artist UNION ALL SELECT * FROM artist',
54
        array(
55
            'rootTag' => 'music_library',
56
            'rowTag' => 'artist',
57
            'idColumn' => 'artistid',
58
            'elements' => array(
59
                'artistid',
60
                'name',
61
                'birth_year',
62
                'birth_place',
63
                'genre',
64
                'albums' => array(
65
                    'sql' => array(
66
                        'data' => array(
67
                            'artistid',
68
                            ':2000'
69
                        ),
70
                        'query' => 'SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?',
71
                        'limit' => 1,
72
                        'offset' => 2
73
                    ),
74
                    'sql_options' => array(
75
                        'cached' => true
76
                    ),
77
                    'rootTag' => 'albums',
78
                    'rowTag' => 'album',
79
                    'idColumn' => 'albumid',
80
                    'elements' => array(
81
                        'albumid',
82
                        'title',
83
                        'published_year',
84
                        'comment'
85
                    )
86
                )
87
            )
88
        )
89
    );
90
    $query2xml->disableDebugLog();
91
    echo $debugLogger->data;
92
?>
93
--EXPECT--
94
QUERY: SELECT * FROM artist UNION ALL SELECT * FROM artist
95
FROM DB: SELECT * FROM artist UNION ALL SELECT * FROM artist
96
DONE
97
QUERY: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?; LIMIT:1; OFFSET:2 (USING CACHING); DATA:1,2000
98
FROM DB: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?
99
DONE
100
QUERY: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?; LIMIT:1; OFFSET:2 (USING CACHING); DATA:2,2000
101
FROM DB: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?
102
DONE
103
QUERY: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?; LIMIT:1; OFFSET:2 (USING CACHING); DATA:3,2000
104
FROM DB: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?
105
DONE
106
QUERY: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?; LIMIT:1; OFFSET:2 (USING CACHING); DATA:1,2000
107
DONE
108
QUERY: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?; LIMIT:1; OFFSET:2 (USING CACHING); DATA:2,2000
109
DONE
110
QUERY: SELECT * FROM album WHERE artist_id = ? AND NOT albumid = ?; LIMIT:1; OFFSET:2 (USING CACHING); DATA:3,2000
111
DONE