blob: 3c61726523fb10dc2772ebe04dedce33930082f7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
<?php
/**
*
* @package MediaWiki
*
* DB accessable external objects
*
*/
require_once( 'LoadBalancer.php' );
/** @package MediaWiki */
class ExternalStoreDB {
var $loadBalancers = array();
/**
* Fetch data from given URL
* @param string $url An url
*/
function &getLoadBalancer( $cluster ) {
global $wgExternalServers;
if ( !array_key_exists( $cluster, $this->loadBalancers ) ) {
$this->loadBalancers[$cluster] = LoadBalancer::newFromParams( $wgExternalServers[$cluster] );
}
return $this->loadBalancers[$cluster];
}
function &getSlave( $cluster ) {
$lb =& $this->getLoadBalancer( $cluster );
return $lb->getConnection( DB_SLAVE );
}
function &getMaster( $cluster ) {
$lb =& $this->getLoadBalancer( $cluster );
return $lb->getConnection( DB_MASTER );
}
function fetchFromURL($url) {
global $wgExternalServers;
#
# URLs have the form DB://cluster/id or DB://cluster/id/itemid for concatenated storage
#
$path = explode( '/', $url );
$cluster = $path[2];
$id = $path[3];
if ( isset( $path[4] ) ) {
$itemID = $path[4];
} else {
$itemID = false;
}
$dbr =& $this->getSlave( $cluster );
$ret = $dbr->selectField( 'blobs', 'blob_text', array( 'blob_id' => $id ) );
if ( $itemID !== false ) {
# Unserialise object and get item
$obj = unserialize( $ret );
$ret = $obj->getItem( $itemID );
}
return $ret;
}
/**
* Insert a data item into a given cluster
*
* @param string $cluster The cluster name
* @param string $data The data item
* @return string URL
*/
function store( $cluster, $data ) {
global $wgExternalServers;
$fname = 'ExternalStoreDB::store';
$dbw =& $this->getMaster( $cluster );
$id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
$dbw->insert( 'blobs', array( 'blob_id' => $id, 'blob_text' => $data ), $fname );
return "DB://$cluster/" . $dbw->insertId();
}
}
?>
|